
package UsuariosDAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import Exceptions.CadUserException;
import Exceptions.PesquisaUsuarioException;
import Model.Usuario;
import ServicosDAO.ConexaoDAO;
import Tipos.TipoSexo;

public class UsuarioDAO {

	private LoginDAO loginDao;




	public UsuarioDAO() {

		this.loginDao = new LoginDAO();
	}




	public boolean adicionarUsuario(Usuario usuario) {

		String sql = "insert into usuario(id_usuario,nome,sexo,dt_nascimento,sobrenome) values('"
				+ usuario.getId_usuario()
				+ "','"
				+ usuario.getNome()
				+ "','"
				+ usuario.getSexo()
				+ "','"
				+ usuario.getDt_nascimento()
				+ "','" + usuario.getSobrenome() + "')";

		int ok = 0;
		Connection conexao = new ConexaoDAO().getConnection();

		try {

			PreparedStatement stmt = conexao.prepareStatement(sql);

			ok = stmt.executeUpdate();

			stmt.close();
			conexao.close();

			if (ok == 1) {
				return true;
			}

		} catch (SQLException e) {
			throw new CadUserException(e);
		}
		return false;
	}




	public boolean removerUsuario(Usuario usuario) {

		String sql = "delete from usuario where id_usuario=?";
		Connection conexao = new ConexaoDAO().getConnection();

		int ok = 0;

		try {

			PreparedStatement stmt = conexao.prepareStatement(sql);

			stmt.setString(1, usuario.getId_usuario());

			ok = stmt.executeUpdate();

			stmt.close();
			conexao.close();

			if (ok == 1) {
				return true;
			}

		} catch (SQLException e) {

			e.printStackTrace();
			throw new RuntimeException();
		}
		return false;

	}




	public boolean atualizarUsuario(Usuario usuario) {

		String sql = "update usuario set nome='" + usuario.getNome()
				+ "', sexo='" + usuario.getSexo().name() + "', dt_nascimento='"
				+ usuario.getDt_nascimento() + "', sobrenome='"
				+ usuario.getSobrenome() + "' where id_usuario='"
				+ usuario.getId_usuario() + "'";
		Connection conexao = new ConexaoDAO().getConnection();

		int ok = 0;

		try {

			PreparedStatement stmt = conexao.prepareStatement(sql);

			ok = stmt.executeUpdate();

			stmt.close();
			conexao.close();

			if (ok == 1) {
				return true;
			}

		} catch (SQLException e) {

			e.printStackTrace();
			throw new RuntimeException();

		}
		return false;
	}




	// recupera o usuario
	public Usuario selectUsuario(Usuario usuario) {

		Connection conexao = new ConexaoDAO().getConnection();

		try {
			ResultSet rs;
			Usuario user = new Usuario();

			String sql = "select * from usuario where id_usuario=?";

			PreparedStatement stmt = conexao.prepareStatement(sql);

			stmt.setString(1, usuario.getId_usuario());

			rs = stmt.executeQuery();

			if (rs != null) {

				while (rs.next()) {
					user.setId_usuario(rs.getString("id_usuario"));
					user.setNome(rs.getString("nome"));
					user.setSexo(TipoSexo.valueOf(rs.getString("sexo")));
					user.setDt_nascimento(rs.getString("dt_nascimento"));
					user.setSobrenome(rs.getString("sobrenome"));
				}

				stmt.close();
				conexao.close();

				return user;

			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException();
		}

		return null;

	}




	public ArrayList<Usuario> getLista() {

		Connection conexao = new ConexaoDAO().getConnection();

		ArrayList<Usuario> lista = new ArrayList<Usuario>();

		String sql = "select id_usuario,nome,sobrenome,dt_nascimento,sexo from bibliotecario join usuario on id_usuario=id_bibliotecario";

		try {

			ResultSet rs = conexao.prepareStatement(sql).executeQuery();

			while (rs.next()) {

				Usuario user = new Usuario();
				user.setId_usuario(rs.getString("id_usuario"));
				user.setNome(rs.getString("nome"));
				user.setSobrenome(rs.getString("sobrenome"));
				user.setDt_nascimento(rs.getString("dt_nascimento"));
				user.setSexo(TipoSexo.valueOf(rs.getString("sexo")));

				lista.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException();
		}

		return lista;

	}




	public List<Usuario> selectUsuarios(String termo, String palavraChave) {

		Connection conexao = new ConexaoDAO().getConnection();

		ArrayList<Usuario> lista = new ArrayList<Usuario>();

		String sql = "select * from usuario where " + termo + " like '%"
				+ palavraChave + "%'";

		try {

			ResultSet rs = conexao.prepareStatement(sql).executeQuery();

			while (rs.next()) {

				Usuario user = new Usuario();
				user.setId_usuario(rs.getString("id_usuario"));
				user.setNome(rs.getString("nome"));
				user.setSobrenome(rs.getString("sobrenome"));
				user.setDt_nascimento(rs.getString("dt_nascimento"));
				user.setSexo(TipoSexo.valueOf(rs.getString("sexo")));

				lista.add(user);
			}
		} catch (SQLException e) {
			throw new PesquisaUsuarioException(e);
		}

		return lista;
	}




	public void setLoginDao(LoginDAO loginDao) {

		this.loginDao = loginDao;
	}




	public LoginDAO getLoginDao() {

		return loginDao;
	}

}
